import Vue from "vue";
import VueRouter from "vue-router";
import defaultRoutes from "@/router/defaultRoutes";

Vue.use(VueRouter);

// console.log(VueRouter);

//防止多次点击
let originPush = VueRouter.prototype.push;
let originReplace = VueRouter.prototype.replace;

// call与apply：相同点：都可以修改this,
// 不同点：传递的参数，call传递多个参数时，以，作为分隔
//    apply传递多个参数时，以数组方式进行

// 重写push/replace
// 第一个参数：告诉原来push方法，你往哪里跳转（传递哪些参数）
// 第二个参数：成功的回调
// 第二个参数：失败的回调
VueRouter.prototype.push = function (location, resolve, reject) {
  if (resolve && reject) {
    originPush.call(this, location, resolve, reject);
  } else {
    originPush.call(
      this,
      location,
      () => {},
      () => {}
    );
  }
};

VueRouter.prototype.replace = function (location, resolve, reject) {
  if (resolve && reject) {
    originReplace.call(this, location, resolve, reject);
  } else {
    originReplace.call(
      this,
      location,
      () => {},
      () => {}
    );
  }
};

const createRouter = () =>
  new VueRouter({
    mode: "history",
    scrollBehavior: () => ({ y: 0 }),
    routes: defaultRoutes,
  });
const router = createRouter();

//解决重复登录时重复添加路由 或者 高级权限改低级权限时 某些路由已经注入的问题
export function resetRouter() {
  // 获取原始路由数据
  // var options = router.options;

  // 用原始数据重新 new 一个路由
  // var _VueRouter = new VueRouter(options);
  var _VueRouter = new VueRouter({});

  // 用新路由的 matcher 替换旧路由的 matcher
  router.matcher = _VueRouter.matcher;
}

//路由报错----必须添加，若出现后台返回不规范的path路径，写了此方法可避免页面报错或空白
router.onError((callback) => {
  router.push({ path: "/404" });
});

export default router;
